#include "apue.h"
#include <errno.h>
#include <limits.h>

#ifdef PATH_MAX
static long pathmax = PATH_MAX;
#else 
static long pathmax = 0;
#endif

static long poxis_version = 0;
static long xsi_version = 0;

#define PATH_MAX_GUESS 1024

char *
path_alloc(size_t *siep) {
	char *ptr;
	size_t size;

	if(poxis_version == 0) 
		poxis_version = sysconf(_SC_VERSION);

	if(xsi_version == 0) 
		xsi_version = sysconf(_SC_XOPEN_VERSION);

	if(pathmax ==0) {
		errno = 0;
		if((pathmax = pathconf("/", _PC_PATH_MAX)) < 0) {
			if (errno == 0) {
				pathmax = PATH_MAX_GUESS;
			} else {
				err_sys("pathconf error for _PC_PATH_MAX");
			}
		} else {
			pathmax++;
		}
	}

	if((poxis_version < 200112L) && (xsi_version < 4)) 
		size = pathmax + 1;
	else 
		size = pathmax;

	if ((ptr = malloc(size)) == null)
		err_sys("malloc error for pathname");

	if (sizep != NULL)
		*sizep = size;

	return (ptr);
}

